package com.qd.common.panda.domain.entity.carpark.calculate;

import lombok.Data;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * 优惠价
 *
 * @author sjk
 * @create 2022-10-11 10:41
 * @since 1.0.0
 */
@Data
@Accessors(chain = true)
public class CalculatePriceDTO {
    /**
     * 返回给前端一个唯一编号，当前类会被缓存起来
     * 等到创建订单的时候带上这个唯一的编号，然后从缓存取出来
     * 这样避免又去调用算费接口，加快执行效率
     */
    private String id;
    /**
     * 原价
     */
    private BigDecimal price;
    /**
     * 原价显示
     */
    private String priceDisplay;
    /**
     * 优惠价
     */
    private BigDecimal calculatePrice;
    /**
     * 优惠价显示
     */
    private String calculatePriceDisplay;
    /**
     * 优惠金额
     */
    private BigDecimal discountAmount;
    /**
     * 优惠金额显示
     */
    private String discountAmountDisplay;
    /**
     * 优惠券（若有使用优惠券）优惠金额
     */
    private BigDecimal couponAmount;
    /**
     * 优惠券优惠金额显示
     */
    private String couponAmountDisplay;
    /**
     * 积分（若有使用积分）优惠金额
     */
    private BigDecimal integralAmount;
    /**
     * 积分优惠金额显示
     */
    private String integralAmountDisplay;
    /**
     * 服务费
     */
    private BigDecimal serviceFee;
    /**
     * 服务费显示金额
     */
    private String serviceFeeDisplay;
    /**
     * 加油量
     */
    private BigDecimal oilVolume;
    /**
     * 优惠明细
     */
    private List<CalculatePriceDetailDTO> detailList;
    /**
     * 最大优惠金额
     */
    private Map<String,Object> userCard;
    /**
     * 支付到第三方加油站的费用
     * 壳牌是打折后的费用，折扣是我们自己定的
     * 易加油是调用他的接口计算出来的费用
     */
    private BigDecimal refuelingAmount;


    public void addCalculatePriceDetailDTO(CalculatePriceDetailDTO calculatePriceDetailDTO) {
        if (null == detailList) {
            detailList = new ArrayList<>(10);
        }
        detailList.add(calculatePriceDetailDTO);
    }

    public void clearDetailList() {
        Optional.ofNullable(detailList).ifPresent(List::clear);
        detailList = null;
    }

    public void freeData() {
        this.id = null;
        this.price = null;
        this.priceDisplay = null;
        this.calculatePrice = null;
        this.calculatePriceDisplay = null;
        this.discountAmount = null;
        this.discountAmountDisplay = null;
        this.couponAmount = null;
        this.couponAmountDisplay = null;
        this.serviceFee = null;
        this.serviceFeeDisplay = null;
        this.oilVolume = null;
        this.integralAmount = null;
        this.integralAmountDisplay = null;
        this.userCard = null;
        this.refuelingAmount = null;
        clearDetailList();
    }
}